// let mname = 'yk'
// let age = 25
// let s = 'school'
// let obj = {  //当传的变量和属性名相同,则可以省略 
//   mname, 
//   age,
//   [s]: 'bilibili', // 当参数为变量时,用 [] 包裹,
//   study: function() {
//     console.log(this.name + '在学习');
//   },
//   // 简写
//   study() { //对象中的 函数简写,不要写成箭头函数
//     //....
//   }
// } 
// obj.study()


// console.log(Object.is(NaN,NaN)); // true

// let obj1 = {a: 1}
// let obj2 = {b: 2} 
// Object.is(obj1, obj2) // false  对象比较的不是内容,而是内存地址



// 对象也可以用拓展运算符
let x = {
  a: 3,
  b: 4
}

// let y = {...x}
let y = {
  a: 4,
  c: 5
}

//object.assign(obj)  将一个对象属性,复制到另一个上
Object.assign(y, x)   // 会覆盖掉原本同名的属性
console.log(y);
console.log('a' in x);  // 判断对象上是否有xx属性

let arr = [1, 2, 3]
console.log(3 in arr); // 判断数组xx位置是否有值

// 对象遍历的4种方式
let obj = {
  age: 24,
  height: 187
}

// 第一种  for in  拿到所有的key
for(let key in obj) {
  console.log(key, obj[key]);
}

// 第二种
Object.keys(obj).forEach(item => {  // Object.key(xxx) 拿到xxx所有属性
  console.log(item, obj[item]);
})

// 第三种
Object.getOwnPropertyNames(obj).forEach(key => {
  console.log(key, obj[key]);
})

// 第四种
Reflect.ownKeys(obj).forEach(key => {
  console.log(key , obj[key]);
})

